-
Notifications
You must be signed in to change notification settings - Fork 1
release #145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
release #145
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
* feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ
* feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ
* feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage
* feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage
* feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
* feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java
* feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change
* refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์
โฆ์ถ๊ฐํ์์ต๋๋ค.
* git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * Feature/integration init (#54) * feature/IntegrationSet(test&Build)-52-HwuanPage * data.sql unique update * image build needs * ignore dev.yml * remove dev.yml tracking and ignore it * prod * proded * Feature/activities 17 audwls239 (#56) * feature: ์ปจํธ๋กค๋ฌ, ์๋น์ค ์์ฑ * feature: ํ๋๋ณ ์ง์ ์กฐํ(์์น ๊ธฐ๋ฐ) * feature: DTO ์ถ๊ฐ * feature: ํ๋๋ณ ์ง์ ์กฐํ(๊ธ๋ก๋ฒ) ์ถ๊ฐ, ์ปจํธ๋กค๋ฌ ์์ * feature: ํ๋๋ณ ์ง์ ์์ธ ์กฐํ(๋ฏธ์์ฑ) * feature: ํด์ ์ ๋ณด ์กฐํ * feature: ํ๋ ์์ธ ์กฐํ --------- * feat : ParticipantError ์ ๋๋ค. * hotfix: error fix * fix : Directory ์์ ์ฌํญ์ ๋๋ค. (#57) * hotfix: error fix * feat: member delete (#58) * fix: ๋ฉค๋ฒ ์ญ์ ๊ตฌํ * feat: ๋ฉค๋ฒ ์ญ์ , ์/๊ฒฝ๋ ์์ ๊ตฌํ * test: ํ ์คํธ ์์ * Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java * Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java * Delete src/main/resources/test.http --------- * fix : ParticipantRepository (#59) existsByMeetingIdAndUserId ๋ก ์์ ํ์์ต๋๋ค. * fix : ParticipantRepository (#60) memberId -> userId๋ก ์์ ํ์์ต๋๋ค. * fix: token (#61) * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * feat: ํ ์คํธ์ฉ ์ก์ธ์ค ํ ํฐ ์์ฑ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * fix : jellyfish ๋ถ๋ถ * fix: activity ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: spot ๋ถ๋ถ * fix: forecast ๋ถ๋ถ * fix: favorite ๋ถ๋ถ * fix: alert ๋ถ๋ถ * fix: meeting ๋ถ๋ถ --------- * hotfix/fix-alert&favorites-62-HwuanPage * fix(hotfix/Meeting) : rebase๋ก ์ธํ ์ฝ๋ ๋๋ฝ ์์ (#65) * hotfix: ์ฝ๋ ๋๋ฝ ํด๊ฒฐ (#67) * Fix/fix 70 gunwoong (#71) * hotfix: fix * hotfix: fix * hotfix: fix * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ (#69) * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ * test: ํ ์คํธ ์ฝ๋ ์์ฑ * fix: activities ์ํ๋ฆฌํฐ ์๋ํฌ์ธํธ ํ์ฉ. redirecturi ์์ * Chore/docker set andvariable-68-hwuanPage * chore/ReadytoDeployv1.0.0-68-HuwanPage * chore/ReadytoDeploymentv1.0.0-68-HuwanPage * remove etc * prod * refactor: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#74) * Feat/meeting test 75 (#77) * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : MeetingServiceImplTest ๋จ์ํ ์คํธ์ ๋๋ค. * feat : MeetingControllerTest ํตํฉํ ์คํธ์ ๋๋ค. * feat : Build Lombok์ ํ ์คํธ๋ฅผ ์ํ ์์ ์ ๋๋ค. * feat : Tag ์ํฐํฐ Tag List<String> content ๋ฅผ ๋ณํํ๊ธฐ ์ํ ํ์ผ์ ๋๋ค. * feat : MeetingServiceImpl * feat : MeetingServiceImpl์์ ์์ ํ๋ ์๋ต์ ์์ , ๋งคํผ๋ฅผ ์์ ํ์์ต๋๋ค. * feat : Meeting์์ ํ์ํ url์ ์ด์ด๋์ต๋๋ค. * space prob solve * stack-trace-DEBUG * hotfix/data.sql deprecate-HwuanPage (#79) * hotfix/data.sql deprecate-HwuanPage * portnum fix * Xtest * test X * workflow fix * add id * fix docker-compose-image-root * release/v1-marineleisure * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#83) * fix: cors ํ๋ก ํธ์๋ ๋ฐฐํฌ ๋๋ฉ์ธ ์ถ๊ฐ (#84) * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. * fix: cors ํ๋กํธ์๋ ๋๋ฉ์ธ ์ถ๊ฐ * hotfix/method_allowed_patch-HwuanPage (#86) * Refactor/exception hwuan page (#87) * refacotr/favorite-Exception-update * fix kakao_redirect_uri * Feature/map service refactoring 76 gunwoong (#85) * feat: mapServiceRefactoring * refactoring: spot detail refactoring * refactoring: GeoUtils refactoring * test: repository test disable for prod * fix: apply flyway to yml * fix: disable test * refactor: khoa refactoring * fix: bug * fix: sql * fix: yml ํ๊ฒฝ๋ณ์ ์ถ๊ฐ * fix: detail field name ์์ * feature: ์ค์ผ์ค๋ง ๋น๋๊ธฐ ๊ตฌํ (#91) * refactor: cacheable (#103) * Fix/meeting urland role (#100) * fix : MeetingServiceImpl getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingRepository getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingError MEETING_MEMBER_NOT_FOUND ์๋ฌ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. ๋ฏธํ ์์ ๋งด๋ฒ๋ฅผ ํ์ธํ ์ ์๋ ์๋ฌ์ ๋๋ค. * fix : MeetingController MeetingController ์์ role ์ ํ์ธํ์ฌ ์ถ๊ฐ ํ์ธํ ์ ์๋๋ก ํ์์ต๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java URL ๊ฐ์ ์ ์ํ ์๋ก์ด ํ ์คํธ ์ ๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java @disabled ์ถ๊ฐ ํ์์ต๋๋ค. * feat: ํ์ ํํด ์ ์นด์นด์ค ์ฐ๊ฒฐ ๋๊ธฐ๋ ์ํํ๊ฒ ๊ตฌํํ๋ค. (#98) * feat: member ์ญ์ ์ kakao ์ฐ๊ฒฐ ๋๊ธฐ ๋ก์ง๋ ์ํํ๊ฒ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test * feat : Meeting์ ์ปค์๋ฐฉ์์์ ๋งคํ์ ํ์์ต๋๋ค. (#94) * feat: ์นด์นด์ค ๋ก๊ทธ์ธ ๊ณผ์ ์์ pkce๋ฅผ ํตํด ๋ณด์ ๊ด์ ์์ ๊ฐ์ (#106) * feat: ๋ณด์ ์ธ์ฆ ๊ณผ์ ์์ PKCE ์ถ๊ฐํ์ฌ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test ์ถ๊ฐ * feat: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ ์ฝ๋ ๊ตฌ์กฐ ๋ณ๊ฒฝ * test: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ test * refactor: PKCE ์์ฑ์ ํด๋ผ์ด์ธํธ ์๊ฒ ๋๊ธด๋ค. * test: pkce test ํ๋ก์ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ณ๊ฒฝ * fix: member entity์ nickname ์ค๋ณต์ ํ์ฉํ๋ค * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * refactor: open-meteo ์๋น์ค ๊ด๋ จ ๋ฆฌํฉํ ๋ง (#95) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. (#105) * Fix: login redirect (#107) * fix: ๋ก๊ทธ์ธ ์์ฒญ๋์ ๋ฆฌ๋ค์ด๋ ํธ uri๋ฅผ ํ ํฐ ๊ตํ์์๋ ์ฌ์ฉ * test: test * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ * Refactor/meeting rich domain (#110) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. * refactor: ๋๋ฝ ํ๋ก์ ํธ ํ์ผ์ด ์์ด ์ฒจ๋ถํฉ๋๋ค. * build: caffenine ์ ์ฉ * relase (#111) (#112) * git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * Feature/integration init (#54) * feature/IntegrationSet(test&Build)-52-HwuanPage * data.sql unique update * image build needs * ignore dev.yml * remove dev.yml tracking and ignore it * prod * proded * Feature/activities 17 audwls239 (#56) * feature: ์ปจํธ๋กค๋ฌ, ์๋น์ค ์์ฑ * feature: ํ๋๋ณ ์ง์ ์กฐํ(์์น ๊ธฐ๋ฐ) * feature: DTO ์ถ๊ฐ * feature: ํ๋๋ณ ์ง์ ์กฐํ(๊ธ๋ก๋ฒ) ์ถ๊ฐ, ์ปจํธ๋กค๋ฌ ์์ * feature: ํ๋๋ณ ์ง์ ์์ธ ์กฐํ(๋ฏธ์์ฑ) * feature: ํด์ ์ ๋ณด ์กฐํ * feature: ํ๋ ์์ธ ์กฐํ --------- * feat : ParticipantError ์ ๋๋ค. * hotfix: error fix * fix : Directory ์์ ์ฌํญ์ ๋๋ค. (#57) * hotfix: error fix * feat: member delete (#58) * fix: ๋ฉค๋ฒ ์ญ์ ๊ตฌํ * feat: ๋ฉค๋ฒ ์ญ์ , ์/๊ฒฝ๋ ์์ ๊ตฌํ * test: ํ ์คํธ ์์ * Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java * Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java * Delete src/main/resources/test.http --------- * fix : ParticipantRepository (#59) existsByMeetingIdAndUserId ๋ก ์์ ํ์์ต๋๋ค. * fix : ParticipantRepository (#60) memberId -> userId๋ก ์์ ํ์์ต๋๋ค. * fix: token (#61) * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * feat: ํ ์คํธ์ฉ ์ก์ธ์ค ํ ํฐ ์์ฑ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * fix : jellyfish ๋ถ๋ถ * fix: activity ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: spot ๋ถ๋ถ * fix: forecast ๋ถ๋ถ * fix: favorite ๋ถ๋ถ * fix: alert ๋ถ๋ถ * fix: meeting ๋ถ๋ถ --------- * hotfix/fix-alert&favorites-62-HwuanPage * fix(hotfix/Meeting) : rebase๋ก ์ธํ ์ฝ๋ ๋๋ฝ ์์ (#65) * hotfix: ์ฝ๋ ๋๋ฝ ํด๊ฒฐ (#67) * Fix/fix 70 gunwoong (#71) * hotfix: fix * hotfix: fix * hotfix: fix * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ (#69) * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ * test: ํ ์คํธ ์ฝ๋ ์์ฑ * fix: activities ์ํ๋ฆฌํฐ ์๋ํฌ์ธํธ ํ์ฉ. redirecturi ์์ * Chore/docker set andvariable-68-hwuanPage * chore/ReadytoDeployv1.0.0-68-HuwanPage * chore/ReadytoDeploymentv1.0.0-68-HuwanPage * remove etc * prod * refactor: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#74) * Feat/meeting test 75 (#77) * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : MeetingServiceImplTest ๋จ์ํ ์คํธ์ ๋๋ค. * feat : MeetingControllerTest ํตํฉํ ์คํธ์ ๋๋ค. * feat : Build Lombok์ ํ ์คํธ๋ฅผ ์ํ ์์ ์ ๋๋ค. * feat : Tag ์ํฐํฐ Tag List<String> content ๋ฅผ ๋ณํํ๊ธฐ ์ํ ํ์ผ์ ๋๋ค. * feat : MeetingServiceImpl * feat : MeetingServiceImpl์์ ์์ ํ๋ ์๋ต์ ์์ , ๋งคํผ๋ฅผ ์์ ํ์์ต๋๋ค. * feat : Meeting์์ ํ์ํ url์ ์ด์ด๋์ต๋๋ค. * space prob solve * stack-trace-DEBUG * hotfix/data.sql deprecate-HwuanPage (#79) * hotfix/data.sql deprecate-HwuanPage * portnum fix * Xtest * test X * workflow fix * add id * fix docker-compose-image-root * release/v1-marineleisure * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#83) * fix: cors ํ๋ก ํธ์๋ ๋ฐฐํฌ ๋๋ฉ์ธ ์ถ๊ฐ (#84) * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. * fix: cors ํ๋กํธ์๋ ๋๋ฉ์ธ ์ถ๊ฐ * hotfix/method_allowed_patch-HwuanPage (#86) * Refactor/exception hwuan page (#87) * refacotr/favorite-Exception-update * fix kakao_redirect_uri * Feature/map service refactoring 76 gunwoong (#85) * feat: mapServiceRefactoring * refactoring: spot detail refactoring * refactoring: GeoUtils refactoring * test: repository test disable for prod * fix: apply flyway to yml * fix: disable test * refactor: khoa refactoring * fix: bug * fix: sql * fix: yml ํ๊ฒฝ๋ณ์ ์ถ๊ฐ * fix: detail field name ์์ * feature: ์ค์ผ์ค๋ง ๋น๋๊ธฐ ๊ตฌํ (#91) * refactor: cacheable (#103) * Fix/meeting urland role (#100) * fix : MeetingServiceImpl getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingRepository getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingError MEETING_MEMBER_NOT_FOUND ์๋ฌ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. ๋ฏธํ ์์ ๋งด๋ฒ๋ฅผ ํ์ธํ ์ ์๋ ์๋ฌ์ ๋๋ค. * fix : MeetingController MeetingController ์์ role ์ ํ์ธํ์ฌ ์ถ๊ฐ ํ์ธํ ์ ์๋๋ก ํ์์ต๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java URL ๊ฐ์ ์ ์ํ ์๋ก์ด ํ ์คํธ ์ ๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java @disabled ์ถ๊ฐ ํ์์ต๋๋ค. * feat: ํ์ ํํด ์ ์นด์นด์ค ์ฐ๊ฒฐ ๋๊ธฐ๋ ์ํํ๊ฒ ๊ตฌํํ๋ค. (#98) * feat: member ์ญ์ ์ kakao ์ฐ๊ฒฐ ๋๊ธฐ ๋ก์ง๋ ์ํํ๊ฒ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test * feat : Meeting์ ์ปค์๋ฐฉ์์์ ๋งคํ์ ํ์์ต๋๋ค. (#94) * feat: ์นด์นด์ค ๋ก๊ทธ์ธ ๊ณผ์ ์์ pkce๋ฅผ ํตํด ๋ณด์ ๊ด์ ์์ ๊ฐ์ (#106) * feat: ๋ณด์ ์ธ์ฆ ๊ณผ์ ์์ PKCE ์ถ๊ฐํ์ฌ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test ์ถ๊ฐ * feat: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ ์ฝ๋ ๊ตฌ์กฐ ๋ณ๊ฒฝ * test: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ test * refactor: PKCE ์์ฑ์ ํด๋ผ์ด์ธํธ ์๊ฒ ๋๊ธด๋ค. * test: pkce test ํ๋ก์ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ณ๊ฒฝ * fix: member entity์ nickname ์ค๋ณต์ ํ์ฉํ๋ค * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * refactor: open-meteo ์๋น์ค ๊ด๋ จ ๋ฆฌํฉํ ๋ง (#95) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. (#105) * Fix: login redirect (#107) * fix: ๋ก๊ทธ์ธ ์์ฒญ๋์ ๋ฆฌ๋ค์ด๋ ํธ uri๋ฅผ ํ ํฐ ๊ตํ์์๋ ์ฌ์ฉ * test: test * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ * Refactor/meeting rich domain (#110) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. * refactor: ๋๋ฝ ํ๋ก์ ํธ ํ์ผ์ด ์์ด ์ฒจ๋ถํฉ๋๋ค. * build: caffenine ์ ์ฉ --------- * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ (#113) * release (#114) (#115) * git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ โฆ Co-authored-by: HwuanPage <[email protected]> Co-authored-by: JaeoneHeo <[email protected]> Co-authored-by: LEESUNBIN <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: MyungJin <[email protected]> Co-authored-by: iseonbin <[email protected]> Co-authored-by: MyungJin <[email protected]>
* hotfix: weather * hotfix: activity index
* git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * Feature/integration init (#54) * feature/IntegrationSet(test&Build)-52-HwuanPage * data.sql unique update * image build needs * ignore dev.yml * remove dev.yml tracking and ignore it * prod * proded * Feature/activities 17 audwls239 (#56) * feature: ์ปจํธ๋กค๋ฌ, ์๋น์ค ์์ฑ * feature: ํ๋๋ณ ์ง์ ์กฐํ(์์น ๊ธฐ๋ฐ) * feature: DTO ์ถ๊ฐ * feature: ํ๋๋ณ ์ง์ ์กฐํ(๊ธ๋ก๋ฒ) ์ถ๊ฐ, ์ปจํธ๋กค๋ฌ ์์ * feature: ํ๋๋ณ ์ง์ ์์ธ ์กฐํ(๋ฏธ์์ฑ) * feature: ํด์ ์ ๋ณด ์กฐํ * feature: ํ๋ ์์ธ ์กฐํ --------- * feat : ParticipantError ์ ๋๋ค. * hotfix: error fix * fix : Directory ์์ ์ฌํญ์ ๋๋ค. (#57) * hotfix: error fix * feat: member delete (#58) * fix: ๋ฉค๋ฒ ์ญ์ ๊ตฌํ * feat: ๋ฉค๋ฒ ์ญ์ , ์/๊ฒฝ๋ ์์ ๊ตฌํ * test: ํ ์คํธ ์์ * Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java * Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java * Delete src/main/resources/test.http --------- * fix : ParticipantRepository (#59) existsByMeetingIdAndUserId ๋ก ์์ ํ์์ต๋๋ค. * fix : ParticipantRepository (#60) memberId -> userId๋ก ์์ ํ์์ต๋๋ค. * fix: token (#61) * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * feat: ํ ์คํธ์ฉ ์ก์ธ์ค ํ ํฐ ์์ฑ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * fix : jellyfish ๋ถ๋ถ * fix: activity ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: spot ๋ถ๋ถ * fix: forecast ๋ถ๋ถ * fix: favorite ๋ถ๋ถ * fix: alert ๋ถ๋ถ * fix: meeting ๋ถ๋ถ --------- * hotfix/fix-alert&favorites-62-HwuanPage * fix(hotfix/Meeting) : rebase๋ก ์ธํ ์ฝ๋ ๋๋ฝ ์์ (#65) * hotfix: ์ฝ๋ ๋๋ฝ ํด๊ฒฐ (#67) * Fix/fix 70 gunwoong (#71) * hotfix: fix * hotfix: fix * hotfix: fix * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ (#69) * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ * test: ํ ์คํธ ์ฝ๋ ์์ฑ * fix: activities ์ํ๋ฆฌํฐ ์๋ํฌ์ธํธ ํ์ฉ. redirecturi ์์ * Chore/docker set andvariable-68-hwuanPage * chore/ReadytoDeployv1.0.0-68-HuwanPage * chore/ReadytoDeploymentv1.0.0-68-HuwanPage * remove etc * prod * refactor: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#74) * Feat/meeting test 75 (#77) * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : MeetingServiceImplTest ๋จ์ํ ์คํธ์ ๋๋ค. * feat : MeetingControllerTest ํตํฉํ ์คํธ์ ๋๋ค. * feat : Build Lombok์ ํ ์คํธ๋ฅผ ์ํ ์์ ์ ๋๋ค. * feat : Tag ์ํฐํฐ Tag List<String> content ๋ฅผ ๋ณํํ๊ธฐ ์ํ ํ์ผ์ ๋๋ค. * feat : MeetingServiceImpl * feat : MeetingServiceImpl์์ ์์ ํ๋ ์๋ต์ ์์ , ๋งคํผ๋ฅผ ์์ ํ์์ต๋๋ค. * feat : Meeting์์ ํ์ํ url์ ์ด์ด๋์ต๋๋ค. * space prob solve * stack-trace-DEBUG * hotfix/data.sql deprecate-HwuanPage (#79) * hotfix/data.sql deprecate-HwuanPage * portnum fix * Xtest * test X * workflow fix * add id * fix docker-compose-image-root * release/v1-marineleisure * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#83) * fix: cors ํ๋ก ํธ์๋ ๋ฐฐํฌ ๋๋ฉ์ธ ์ถ๊ฐ (#84) * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. * fix: cors ํ๋กํธ์๋ ๋๋ฉ์ธ ์ถ๊ฐ * hotfix/method_allowed_patch-HwuanPage (#86) * Refactor/exception hwuan page (#87) * refacotr/favorite-Exception-update * fix kakao_redirect_uri * Feature/map service refactoring 76 gunwoong (#85) * feat: mapServiceRefactoring * refactoring: spot detail refactoring * refactoring: GeoUtils refactoring * test: repository test disable for prod * fix: apply flyway to yml * fix: disable test * refactor: khoa refactoring * fix: bug * fix: sql * fix: yml ํ๊ฒฝ๋ณ์ ์ถ๊ฐ * fix: detail field name ์์ * feature: ์ค์ผ์ค๋ง ๋น๋๊ธฐ ๊ตฌํ (#91) * refactor: cacheable (#103) * Fix/meeting urland role (#100) * fix : MeetingServiceImpl getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingRepository getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingError MEETING_MEMBER_NOT_FOUND ์๋ฌ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. ๋ฏธํ ์์ ๋งด๋ฒ๋ฅผ ํ์ธํ ์ ์๋ ์๋ฌ์ ๋๋ค. * fix : MeetingController MeetingController ์์ role ์ ํ์ธํ์ฌ ์ถ๊ฐ ํ์ธํ ์ ์๋๋ก ํ์์ต๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java URL ๊ฐ์ ์ ์ํ ์๋ก์ด ํ ์คํธ ์ ๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java @disabled ์ถ๊ฐ ํ์์ต๋๋ค. * feat: ํ์ ํํด ์ ์นด์นด์ค ์ฐ๊ฒฐ ๋๊ธฐ๋ ์ํํ๊ฒ ๊ตฌํํ๋ค. (#98) * feat: member ์ญ์ ์ kakao ์ฐ๊ฒฐ ๋๊ธฐ ๋ก์ง๋ ์ํํ๊ฒ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test * feat : Meeting์ ์ปค์๋ฐฉ์์์ ๋งคํ์ ํ์์ต๋๋ค. (#94) * feat: ์นด์นด์ค ๋ก๊ทธ์ธ ๊ณผ์ ์์ pkce๋ฅผ ํตํด ๋ณด์ ๊ด์ ์์ ๊ฐ์ (#106) * feat: ๋ณด์ ์ธ์ฆ ๊ณผ์ ์์ PKCE ์ถ๊ฐํ์ฌ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test ์ถ๊ฐ * feat: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ ์ฝ๋ ๊ตฌ์กฐ ๋ณ๊ฒฝ * test: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ test * refactor: PKCE ์์ฑ์ ํด๋ผ์ด์ธํธ ์๊ฒ ๋๊ธด๋ค. * test: pkce test ํ๋ก์ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ณ๊ฒฝ * fix: member entity์ nickname ์ค๋ณต์ ํ์ฉํ๋ค * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * refactor: open-meteo ์๋น์ค ๊ด๋ จ ๋ฆฌํฉํ ๋ง (#95) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. (#105) * Fix: login redirect (#107) * fix: ๋ก๊ทธ์ธ ์์ฒญ๋์ ๋ฆฌ๋ค์ด๋ ํธ uri๋ฅผ ํ ํฐ ๊ตํ์์๋ ์ฌ์ฉ * test: test * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ * Refactor/meeting rich domain (#110) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. * refactor: ๋๋ฝ ํ๋ก์ ํธ ํ์ผ์ด ์์ด ์ฒจ๋ถํฉ๋๋ค. * build: caffenine ์ ์ฉ * relase (#111) (#112) * git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * Feature/integration init (#54) * feature/IntegrationSet(test&Build)-52-HwuanPage * data.sql unique update * image build needs * ignore dev.yml * remove dev.yml tracking and ignore it * prod * proded * Feature/activities 17 audwls239 (#56) * feature: ์ปจํธ๋กค๋ฌ, ์๋น์ค ์์ฑ * feature: ํ๋๋ณ ์ง์ ์กฐํ(์์น ๊ธฐ๋ฐ) * feature: DTO ์ถ๊ฐ * feature: ํ๋๋ณ ์ง์ ์กฐํ(๊ธ๋ก๋ฒ) ์ถ๊ฐ, ์ปจํธ๋กค๋ฌ ์์ * feature: ํ๋๋ณ ์ง์ ์์ธ ์กฐํ(๋ฏธ์์ฑ) * feature: ํด์ ์ ๋ณด ์กฐํ * feature: ํ๋ ์์ธ ์กฐํ --------- * feat : ParticipantError ์ ๋๋ค. * hotfix: error fix * fix : Directory ์์ ์ฌํญ์ ๋๋ค. (#57) * hotfix: error fix * feat: member delete (#58) * fix: ๋ฉค๋ฒ ์ญ์ ๊ตฌํ * feat: ๋ฉค๋ฒ ์ญ์ , ์/๊ฒฝ๋ ์์ ๊ตฌํ * test: ํ ์คํธ ์์ * Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java * Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java * Delete src/main/resources/test.http --------- * fix : ParticipantRepository (#59) existsByMeetingIdAndUserId ๋ก ์์ ํ์์ต๋๋ค. * fix : ParticipantRepository (#60) memberId -> userId๋ก ์์ ํ์์ต๋๋ค. * fix: token (#61) * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * feat: ํ ์คํธ์ฉ ์ก์ธ์ค ํ ํฐ ์์ฑ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * fix : jellyfish ๋ถ๋ถ * fix: activity ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: spot ๋ถ๋ถ * fix: forecast ๋ถ๋ถ * fix: favorite ๋ถ๋ถ * fix: alert ๋ถ๋ถ * fix: meeting ๋ถ๋ถ --------- * hotfix/fix-alert&favorites-62-HwuanPage * fix(hotfix/Meeting) : rebase๋ก ์ธํ ์ฝ๋ ๋๋ฝ ์์ (#65) * hotfix: ์ฝ๋ ๋๋ฝ ํด๊ฒฐ (#67) * Fix/fix 70 gunwoong (#71) * hotfix: fix * hotfix: fix * hotfix: fix * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ (#69) * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ * test: ํ ์คํธ ์ฝ๋ ์์ฑ * fix: activities ์ํ๋ฆฌํฐ ์๋ํฌ์ธํธ ํ์ฉ. redirecturi ์์ * Chore/docker set andvariable-68-hwuanPage * chore/ReadytoDeployv1.0.0-68-HuwanPage * chore/ReadytoDeploymentv1.0.0-68-HuwanPage * remove etc * prod * refactor: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#74) * Feat/meeting test 75 (#77) * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : MeetingServiceImplTest ๋จ์ํ ์คํธ์ ๋๋ค. * feat : MeetingControllerTest ํตํฉํ ์คํธ์ ๋๋ค. * feat : Build Lombok์ ํ ์คํธ๋ฅผ ์ํ ์์ ์ ๋๋ค. * feat : Tag ์ํฐํฐ Tag List<String> content ๋ฅผ ๋ณํํ๊ธฐ ์ํ ํ์ผ์ ๋๋ค. * feat : MeetingServiceImpl * feat : MeetingServiceImpl์์ ์์ ํ๋ ์๋ต์ ์์ , ๋งคํผ๋ฅผ ์์ ํ์์ต๋๋ค. * feat : Meeting์์ ํ์ํ url์ ์ด์ด๋์ต๋๋ค. * space prob solve * stack-trace-DEBUG * hotfix/data.sql deprecate-HwuanPage (#79) * hotfix/data.sql deprecate-HwuanPage * portnum fix * Xtest * test X * workflow fix * add id * fix docker-compose-image-root * release/v1-marineleisure * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#83) * fix: cors ํ๋ก ํธ์๋ ๋ฐฐํฌ ๋๋ฉ์ธ ์ถ๊ฐ (#84) * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. * fix: cors ํ๋กํธ์๋ ๋๋ฉ์ธ ์ถ๊ฐ * hotfix/method_allowed_patch-HwuanPage (#86) * Refactor/exception hwuan page (#87) * refacotr/favorite-Exception-update * fix kakao_redirect_uri * Feature/map service refactoring 76 gunwoong (#85) * feat: mapServiceRefactoring * refactoring: spot detail refactoring * refactoring: GeoUtils refactoring * test: repository test disable for prod * fix: apply flyway to yml * fix: disable test * refactor: khoa refactoring * fix: bug * fix: sql * fix: yml ํ๊ฒฝ๋ณ์ ์ถ๊ฐ * fix: detail field name ์์ * feature: ์ค์ผ์ค๋ง ๋น๋๊ธฐ ๊ตฌํ (#91) * refactor: cacheable (#103) * Fix/meeting urland role (#100) * fix : MeetingServiceImpl getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingRepository getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingError MEETING_MEMBER_NOT_FOUND ์๋ฌ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. ๋ฏธํ ์์ ๋งด๋ฒ๋ฅผ ํ์ธํ ์ ์๋ ์๋ฌ์ ๋๋ค. * fix : MeetingController MeetingController ์์ role ์ ํ์ธํ์ฌ ์ถ๊ฐ ํ์ธํ ์ ์๋๋ก ํ์์ต๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java URL ๊ฐ์ ์ ์ํ ์๋ก์ด ํ ์คํธ ์ ๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java @disabled ์ถ๊ฐ ํ์์ต๋๋ค. * feat: ํ์ ํํด ์ ์นด์นด์ค ์ฐ๊ฒฐ ๋๊ธฐ๋ ์ํํ๊ฒ ๊ตฌํํ๋ค. (#98) * feat: member ์ญ์ ์ kakao ์ฐ๊ฒฐ ๋๊ธฐ ๋ก์ง๋ ์ํํ๊ฒ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test * feat : Meeting์ ์ปค์๋ฐฉ์์์ ๋งคํ์ ํ์์ต๋๋ค. (#94) * feat: ์นด์นด์ค ๋ก๊ทธ์ธ ๊ณผ์ ์์ pkce๋ฅผ ํตํด ๋ณด์ ๊ด์ ์์ ๊ฐ์ (#106) * feat: ๋ณด์ ์ธ์ฆ ๊ณผ์ ์์ PKCE ์ถ๊ฐํ์ฌ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test ์ถ๊ฐ * feat: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ ์ฝ๋ ๊ตฌ์กฐ ๋ณ๊ฒฝ * test: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ test * refactor: PKCE ์์ฑ์ ํด๋ผ์ด์ธํธ ์๊ฒ ๋๊ธด๋ค. * test: pkce test ํ๋ก์ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ณ๊ฒฝ * fix: member entity์ nickname ์ค๋ณต์ ํ์ฉํ๋ค * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * refactor: open-meteo ์๋น์ค ๊ด๋ จ ๋ฆฌํฉํ ๋ง (#95) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. (#105) * Fix: login redirect (#107) * fix: ๋ก๊ทธ์ธ ์์ฒญ๋์ ๋ฆฌ๋ค์ด๋ ํธ uri๋ฅผ ํ ํฐ ๊ตํ์์๋ ์ฌ์ฉ * test: test * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ * Refactor/meeting rich domain (#110) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. * refactor: ๋๋ฝ ํ๋ก์ ํธ ํ์ผ์ด ์์ด ์ฒจ๋ถํฉ๋๋ค. * build: caffenine ์ ์ฉ --------- * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ (#113) * release (#114) (#115) * git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ โฆ Co-authored-by: HwuanPage <[email protected]> Co-authored-by: JaeoneHeo <[email protected]> Co-authored-by: LEESUNBIN <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: MyungJin <[email protected]> Co-authored-by: iseonbin <[email protected]> Co-authored-by: MyungJin <[email protected]>
* hotfix: jellyfish * hotfix: favorite
* Refactor<Meeting> :: TagRepository.java findContentByMeetingId :: ์ฌ์ฉํ์ง ์์ ์ญ์ findByMeetingIdIn :: Map_Batch ๋ฅผ ์ํ ์ฝ๋ * Refactor<Meeting> :: ParticipantRepository countByMeetingIdIn :: Map์์ ํ์ฉํ๊ธฐ ์ํ ๋ฉ์๋ * Refactor<Meeting> :: MeetingServiceImpl ๋น๊ด์ ๋ฝ ํ์ฉ์ ์ํ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ค. * Refactor<Meeting> :: MeetingDomainService ๋น๊ด์ ๋ฝ ํ์ฉ์ ์ํ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ค. * Refactor<Meeting> :: MeetingRepository.java ๋น๊ด์ ๋ฝ ํ์ฉ์ ์ํ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ค. * Refactor<Meeting> :: MeetingController.java Map_Batch์ ์ด์ฉํ๊ธฐ ์ํ ๋ณ๊ฒฝ์ฌํญ์ ๋๋ค. * Refactor<Meeting> :: MeetingControllerTest ๋์์ฑ ํ๋จ์ ์ํ Controller ํ ์คํธ ์ ๋๋ค. * Refactor<Meeting> :: Meeting_test_docs.md ์ด๋ฒ ๋ถํํ ์คํธ๋ฅผ ํ๋ฉด์ ์์ฑํ ๋ฌธ์์ ๋๋ค. * Refactor<Meeting> :: Meeting_test_docs.md code * Refactor<Meeting> :: Meeting_test_docs.md code * Refactor<Meeting> :: Meeting_test_docs.md code * Refactor<Meeting> :: ๋์์ฑ๋ฌธ์ .md
* Refactor<MeetingController> :: goingMeeting MeetingStatus ๋ฅผ ONGOING์ผ๋ก ๋ฐ๊พธ๋ URL ์ ๋๋ค. * Refactor<MeetingError> :: MetingError OnGoingMeeting ์์ ๋ฐ์ํ ์ ์๋ ์๋ฌ๋ฅผ ์์ฑํ์์ต๋๋ค. * Refactor<MeetingService> :: goingMeeting goingMeeting ์๋น์ค ๋ก์ง ์์ฑ * Refactor<MeetingValidate> :: ์ฃผ์ ์ฒ๋ฆฌํ ์ฝ๋ ์ญ์ ๋ฐ Ongoing์ ๋ฐ๊พธ๊ธฐ ์ํ ๊ฒ์ฆ ๋ก์ง์ด ์์ฑ * Refactor<GoingMeetingResponse> :: body์ json ์ ๋ฃ๊ธฐ์ํด ResponseDto๋ฅผ ์์ฑํ์์ต๋๋ค. * Refactor<TEST> :: ๊ฐ ์๋ก ์ถ๊ฐ๋ ์๋น์ค์ ๋จ์ํ ์คํธ์ ํตํฉํ ์คํธ๋ฅผ ์งํํ์์ต๋๋ค. * Feat/delete meeting-136 (#137) * feat<DELETE> :: TagRepository , ParticipantRepository, Meeting์ ์ญ์ ํ๊ธฐ ์ํ ๋จ๊ณ์ ์ธ ์ญ์ Cascaede๋ฅผ ๊ตฌํํ์์ต๋๋ค. * feat<DELETE> :: MeetingServiceImpl , MeetingService , MeetingController Meeting์ ์ญ์ ํ๊ธฐ ์ํ URL ์ ๋๋ค. * feat<DELETE> :: MeetingControllerTest, MeetingServiceImplTest Meeting์ ์ญ์ ํ๊ธฐ ์ํ URL ํ ์คํธ ์ ๋๋ค.
โฆ ํ ์คํธ๋ฅผ ์ํ ์๋ URL ์ด์ง๋ง ๊ตณ์ด ํ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค. (#140)
* feature: flyway * hotfix: activity detail
* git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * Feature/integration init (#54) * feature/IntegrationSet(test&Build)-52-HwuanPage * data.sql unique update * image build needs * ignore dev.yml * remove dev.yml tracking and ignore it * prod * proded * Feature/activities 17 audwls239 (#56) * feature: ์ปจํธ๋กค๋ฌ, ์๋น์ค ์์ฑ * feature: ํ๋๋ณ ์ง์ ์กฐํ(์์น ๊ธฐ๋ฐ) * feature: DTO ์ถ๊ฐ * feature: ํ๋๋ณ ์ง์ ์กฐํ(๊ธ๋ก๋ฒ) ์ถ๊ฐ, ์ปจํธ๋กค๋ฌ ์์ * feature: ํ๋๋ณ ์ง์ ์์ธ ์กฐํ(๋ฏธ์์ฑ) * feature: ํด์ ์ ๋ณด ์กฐํ * feature: ํ๋ ์์ธ ์กฐํ --------- * feat : ParticipantError ์ ๋๋ค. * hotfix: error fix * fix : Directory ์์ ์ฌํญ์ ๋๋ค. (#57) * hotfix: error fix * feat: member delete (#58) * fix: ๋ฉค๋ฒ ์ญ์ ๊ตฌํ * feat: ๋ฉค๋ฒ ์ญ์ , ์/๊ฒฝ๋ ์์ ๊ตฌํ * test: ํ ์คํธ ์์ * Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java * Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java * Delete src/main/resources/test.http --------- * fix : ParticipantRepository (#59) existsByMeetingIdAndUserId ๋ก ์์ ํ์์ต๋๋ค. * fix : ParticipantRepository (#60) memberId -> userId๋ก ์์ ํ์์ต๋๋ค. * fix: token (#61) * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * feat: ํ ์คํธ์ฉ ์ก์ธ์ค ํ ํฐ ์์ฑ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * fix : jellyfish ๋ถ๋ถ * fix: activity ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: spot ๋ถ๋ถ * fix: forecast ๋ถ๋ถ * fix: favorite ๋ถ๋ถ * fix: alert ๋ถ๋ถ * fix: meeting ๋ถ๋ถ --------- * hotfix/fix-alert&favorites-62-HwuanPage * fix(hotfix/Meeting) : rebase๋ก ์ธํ ์ฝ๋ ๋๋ฝ ์์ (#65) * hotfix: ์ฝ๋ ๋๋ฝ ํด๊ฒฐ (#67) * Fix/fix 70 gunwoong (#71) * hotfix: fix * hotfix: fix * hotfix: fix * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ (#69) * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ * test: ํ ์คํธ ์ฝ๋ ์์ฑ * fix: activities ์ํ๋ฆฌํฐ ์๋ํฌ์ธํธ ํ์ฉ. redirecturi ์์ * Chore/docker set andvariable-68-hwuanPage * chore/ReadytoDeployv1.0.0-68-HuwanPage * chore/ReadytoDeploymentv1.0.0-68-HuwanPage * remove etc * prod * refactor: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#74) * Feat/meeting test 75 (#77) * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : MeetingServiceImplTest ๋จ์ํ ์คํธ์ ๋๋ค. * feat : MeetingControllerTest ํตํฉํ ์คํธ์ ๋๋ค. * feat : Build Lombok์ ํ ์คํธ๋ฅผ ์ํ ์์ ์ ๋๋ค. * feat : Tag ์ํฐํฐ Tag List<String> content ๋ฅผ ๋ณํํ๊ธฐ ์ํ ํ์ผ์ ๋๋ค. * feat : MeetingServiceImpl * feat : MeetingServiceImpl์์ ์์ ํ๋ ์๋ต์ ์์ , ๋งคํผ๋ฅผ ์์ ํ์์ต๋๋ค. * feat : Meeting์์ ํ์ํ url์ ์ด์ด๋์ต๋๋ค. * space prob solve * stack-trace-DEBUG * hotfix/data.sql deprecate-HwuanPage (#79) * hotfix/data.sql deprecate-HwuanPage * portnum fix * Xtest * test X * workflow fix * add id * fix docker-compose-image-root * release/v1-marineleisure * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#83) * fix: cors ํ๋ก ํธ์๋ ๋ฐฐํฌ ๋๋ฉ์ธ ์ถ๊ฐ (#84) * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. * fix: cors ํ๋กํธ์๋ ๋๋ฉ์ธ ์ถ๊ฐ * hotfix/method_allowed_patch-HwuanPage (#86) * Refactor/exception hwuan page (#87) * refacotr/favorite-Exception-update * fix kakao_redirect_uri * Feature/map service refactoring 76 gunwoong (#85) * feat: mapServiceRefactoring * refactoring: spot detail refactoring * refactoring: GeoUtils refactoring * test: repository test disable for prod * fix: apply flyway to yml * fix: disable test * refactor: khoa refactoring * fix: bug * fix: sql * fix: yml ํ๊ฒฝ๋ณ์ ์ถ๊ฐ * fix: detail field name ์์ * feature: ์ค์ผ์ค๋ง ๋น๋๊ธฐ ๊ตฌํ (#91) * refactor: cacheable (#103) * Fix/meeting urland role (#100) * fix : MeetingServiceImpl getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingRepository getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingError MEETING_MEMBER_NOT_FOUND ์๋ฌ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. ๋ฏธํ ์์ ๋งด๋ฒ๋ฅผ ํ์ธํ ์ ์๋ ์๋ฌ์ ๋๋ค. * fix : MeetingController MeetingController ์์ role ์ ํ์ธํ์ฌ ์ถ๊ฐ ํ์ธํ ์ ์๋๋ก ํ์์ต๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java URL ๊ฐ์ ์ ์ํ ์๋ก์ด ํ ์คํธ ์ ๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java @disabled ์ถ๊ฐ ํ์์ต๋๋ค. * feat: ํ์ ํํด ์ ์นด์นด์ค ์ฐ๊ฒฐ ๋๊ธฐ๋ ์ํํ๊ฒ ๊ตฌํํ๋ค. (#98) * feat: member ์ญ์ ์ kakao ์ฐ๊ฒฐ ๋๊ธฐ ๋ก์ง๋ ์ํํ๊ฒ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test * feat : Meeting์ ์ปค์๋ฐฉ์์์ ๋งคํ์ ํ์์ต๋๋ค. (#94) * feat: ์นด์นด์ค ๋ก๊ทธ์ธ ๊ณผ์ ์์ pkce๋ฅผ ํตํด ๋ณด์ ๊ด์ ์์ ๊ฐ์ (#106) * feat: ๋ณด์ ์ธ์ฆ ๊ณผ์ ์์ PKCE ์ถ๊ฐํ์ฌ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test ์ถ๊ฐ * feat: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ ์ฝ๋ ๊ตฌ์กฐ ๋ณ๊ฒฝ * test: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ test * refactor: PKCE ์์ฑ์ ํด๋ผ์ด์ธํธ ์๊ฒ ๋๊ธด๋ค. * test: pkce test ํ๋ก์ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ณ๊ฒฝ * fix: member entity์ nickname ์ค๋ณต์ ํ์ฉํ๋ค * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * refactor: open-meteo ์๋น์ค ๊ด๋ จ ๋ฆฌํฉํ ๋ง (#95) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. (#105) * Fix: login redirect (#107) * fix: ๋ก๊ทธ์ธ ์์ฒญ๋์ ๋ฆฌ๋ค์ด๋ ํธ uri๋ฅผ ํ ํฐ ๊ตํ์์๋ ์ฌ์ฉ * test: test * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ * Refactor/meeting rich domain (#110) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. * refactor: ๋๋ฝ ํ๋ก์ ํธ ํ์ผ์ด ์์ด ์ฒจ๋ถํฉ๋๋ค. * build: caffenine ์ ์ฉ * relase (#111) (#112) * git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * Feature/integration init (#54) * feature/IntegrationSet(test&Build)-52-HwuanPage * data.sql unique update * image build needs * ignore dev.yml * remove dev.yml tracking and ignore it * prod * proded * Feature/activities 17 audwls239 (#56) * feature: ์ปจํธ๋กค๋ฌ, ์๋น์ค ์์ฑ * feature: ํ๋๋ณ ์ง์ ์กฐํ(์์น ๊ธฐ๋ฐ) * feature: DTO ์ถ๊ฐ * feature: ํ๋๋ณ ์ง์ ์กฐํ(๊ธ๋ก๋ฒ) ์ถ๊ฐ, ์ปจํธ๋กค๋ฌ ์์ * feature: ํ๋๋ณ ์ง์ ์์ธ ์กฐํ(๋ฏธ์์ฑ) * feature: ํด์ ์ ๋ณด ์กฐํ * feature: ํ๋ ์์ธ ์กฐํ --------- * feat : ParticipantError ์ ๋๋ค. * hotfix: error fix * fix : Directory ์์ ์ฌํญ์ ๋๋ค. (#57) * hotfix: error fix * feat: member delete (#58) * fix: ๋ฉค๋ฒ ์ญ์ ๊ตฌํ * feat: ๋ฉค๋ฒ ์ญ์ , ์/๊ฒฝ๋ ์์ ๊ตฌํ * test: ํ ์คํธ ์์ * Delete src/main/java/sevenstar/marineleisure/meeting/repository/MemberRepository.java * Delete src/main/java/sevenstar/marineleisure/meeting/repository/OutdoorSpotSpotRepository.java * Delete src/main/resources/test.http --------- * fix : ParticipantRepository (#59) existsByMeetingIdAndUserId ๋ก ์์ ํ์์ต๋๋ค. * fix : ParticipantRepository (#60) memberId -> userId๋ก ์์ ํ์์ต๋๋ค. * fix: token (#61) * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * feat: ํ ์คํธ์ฉ ์ก์ธ์ค ํ ํฐ ์์ฑ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ # Conflicts: # src/main/java/sevenstar/marineleisure/global/exception/enums/CommonErrorCode.java # src/main/java/sevenstar/marineleisure/global/swagger/SwaggerController.java * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ ์ฝ๋ ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `createMeeting(Long memberId, CreateMeetingRequest request)`: * ๋ชฉ์ : ์๋ก์ด ๋ชจ์์ ์์ฑํฉ๋๋ค. ํธ์คํธ๋ฅผ ์ฐธ์ฌ์๋ก ์๋ ๋ฑ๋กํ๊ณ ํ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. * `updateMeeting(Long meetingId, Long memberId, UpdateMeetingRequest request)`: * ๋ชฉ์ : ๊ธฐ์กด ๋ชจ์์ ์ ๋ณด๋ฅผ ์์ ํฉ๋๋ค. ํธ์คํธ๋ง ์์ ํ ์ ์๋๋ก ๊ฒ์ฆํฉ๋๋ค. * `deleteMeeting(Member member, Long meetingId)`: * ๋ชฉ์ : ๋ชจ์์ ์ญ์ ํฉ๋๋ค. * ๊ฐ์ ์์ : ๋ฌผ๋ฆฌ์ ์ญ์ ๋์ ๋ ผ๋ฆฌ์ ์ญ์ (Soft Delete) ๋ฐฉ์ ๋์ ์ ๊ณ ๋ ค ์ค์ ๋๋ค. * feat : MeetingValidate.java,MemberValidate.java,ParticipantValidate,SpotValidate,TagValidate.java ๊ฒ์ฆ๋ก์ง์ ์ถ๊ฐํ์์ต๋๋ค. * feat : MemberError.java , ParticipantRepository ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค. --------- * fix : jellyfish ๋ถ๋ถ * fix: activity ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: member ๋ถ๋ถ * fix: spot ๋ถ๋ถ * fix: forecast ๋ถ๋ถ * fix: favorite ๋ถ๋ถ * fix: alert ๋ถ๋ถ * fix: meeting ๋ถ๋ถ --------- * hotfix/fix-alert&favorites-62-HwuanPage * fix(hotfix/Meeting) : rebase๋ก ์ธํ ์ฝ๋ ๋๋ฝ ์์ (#65) * hotfix: ์ฝ๋ ๋๋ฝ ํด๊ฒฐ (#67) * Fix/fix 70 gunwoong (#71) * hotfix: fix * hotfix: fix * hotfix: fix * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ (#69) * fix: application-prod.yml์์ ์ฟ ํค๋ฅผ ์ธ์ง ๋ง์ง ๊ฒฐ์ ํ ์ ์๊ฒ ์์ * test: ํ ์คํธ ์ฝ๋ ์์ฑ * fix: activities ์ํ๋ฆฌํฐ ์๋ํฌ์ธํธ ํ์ฉ. redirecturi ์์ * Chore/docker set andvariable-68-hwuanPage * chore/ReadytoDeployv1.0.0-68-HuwanPage * chore/ReadytoDeploymentv1.0.0-68-HuwanPage * remove etc * prod * refactor: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#74) * Feat/meeting test 75 (#77) * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : Meetingtest ๋ฅผ ์ํ Util ํ์ผ์ ๋๋๋ค. * feat : MeetingServiceImplTest ๋จ์ํ ์คํธ์ ๋๋ค. * feat : MeetingControllerTest ํตํฉํ ์คํธ์ ๋๋ค. * feat : Build Lombok์ ํ ์คํธ๋ฅผ ์ํ ์์ ์ ๋๋ค. * feat : Tag ์ํฐํฐ Tag List<String> content ๋ฅผ ๋ณํํ๊ธฐ ์ํ ํ์ผ์ ๋๋ค. * feat : MeetingServiceImpl * feat : MeetingServiceImpl์์ ์์ ํ๋ ์๋ต์ ์์ , ๋งคํผ๋ฅผ ์์ ํ์์ต๋๋ค. * feat : Meeting์์ ํ์ํ url์ ์ด์ด๋์ต๋๋ค. * space prob solve * stack-trace-DEBUG * hotfix/data.sql deprecate-HwuanPage (#79) * hotfix/data.sql deprecate-HwuanPage * portnum fix * Xtest * test X * workflow fix * add id * fix docker-compose-image-root * release/v1-marineleisure * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. (#83) * fix: cors ํ๋ก ํธ์๋ ๋ฐฐํฌ ๋๋ฉ์ธ ์ถ๊ฐ (#84) * fix: blacklist ์ํฐํฐ์ jti์ ์ธ๋ฑ์ค๋ฅผ ๊ฑด๋ค. * fix: cors ํ๋กํธ์๋ ๋๋ฉ์ธ ์ถ๊ฐ * hotfix/method_allowed_patch-HwuanPage (#86) * Refactor/exception hwuan page (#87) * refacotr/favorite-Exception-update * fix kakao_redirect_uri * Feature/map service refactoring 76 gunwoong (#85) * feat: mapServiceRefactoring * refactoring: spot detail refactoring * refactoring: GeoUtils refactoring * test: repository test disable for prod * fix: apply flyway to yml * fix: disable test * refactor: khoa refactoring * fix: bug * fix: sql * fix: yml ํ๊ฒฝ๋ณ์ ์ถ๊ฐ * fix: detail field name ์์ * feature: ์ค์ผ์ค๋ง ๋น๋๊ธฐ ๊ตฌํ (#91) * refactor: cacheable (#103) * Fix/meeting urland role (#100) * fix : MeetingServiceImpl getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingRepository getStatusMeetings -> getStatusMeeting_role : Guest ์ธ์ง host ์ธ์ง ํ๋จํ๋ ๋ก์ง์ ์ถ๊ฐ * fix : MeetingError MEETING_MEMBER_NOT_FOUND ์๋ฌ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. ๋ฏธํ ์์ ๋งด๋ฒ๋ฅผ ํ์ธํ ์ ์๋ ์๋ฌ์ ๋๋ค. * fix : MeetingController MeetingController ์์ role ์ ํ์ธํ์ฌ ์ถ๊ฐ ํ์ธํ ์ ์๋๋ก ํ์์ต๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java URL ๊ฐ์ ์ ์ํ ์๋ก์ด ํ ์คํธ ์ ๋๋ค. * fix : MeetingServiceImplTest, MeetingControllerTest.java @disabled ์ถ๊ฐ ํ์์ต๋๋ค. * feat: ํ์ ํํด ์ ์นด์นด์ค ์ฐ๊ฒฐ ๋๊ธฐ๋ ์ํํ๊ฒ ๊ตฌํํ๋ค. (#98) * feat: member ์ญ์ ์ kakao ์ฐ๊ฒฐ ๋๊ธฐ ๋ก์ง๋ ์ํํ๊ฒ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test * feat : Meeting์ ์ปค์๋ฐฉ์์์ ๋งคํ์ ํ์์ต๋๋ค. (#94) * feat: ์นด์นด์ค ๋ก๊ทธ์ธ ๊ณผ์ ์์ pkce๋ฅผ ํตํด ๋ณด์ ๊ด์ ์์ ๊ฐ์ (#106) * feat: ๋ณด์ ์ธ์ฆ ๊ณผ์ ์์ PKCE ์ถ๊ฐํ์ฌ ๊ตฌํ * test: ๋ณ๊ฒฝ ์ฌํญ test ์ถ๊ฐ * feat: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ ์ฝ๋ ๊ตฌ์กฐ ๋ณ๊ฒฝ * test: PKCE ๊ธฐ๋ฐ ๋ณด์ ๊ธฐ๋ฅ test * refactor: PKCE ์์ฑ์ ํด๋ผ์ด์ธํธ ์๊ฒ ๋๊ธด๋ค. * test: pkce test ํ๋ก์ฐ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ๋ณ๊ฒฝ * fix: member entity์ nickname ์ค๋ณต์ ํ์ฉํ๋ค * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * fix: ํ ์คํธ๋ฅผ ์ํด SchedulerService.java ์ @RequiredArgsConstrucor ์ง์ด ๋ถ๋ถ ๋ณต๊ตฌ * refactor: open-meteo ์๋น์ค ๊ด๋ จ ๋ฆฌํฉํ ๋ง (#95) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. (#105) * Fix: login redirect (#107) * fix: ๋ก๊ทธ์ธ ์์ฒญ๋์ ๋ฆฌ๋ค์ด๋ ํธ uri๋ฅผ ํ ํฐ ๊ตํ์์๋ ์ฌ์ฉ * test: test * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ * Refactor/meeting rich domain (#110) * refactor: RichDomain์ผ๋ก ๋ณ๊ฒฝ ๋ด์ญ์ ๋๋ค. * refactor: ๋๋ฝ ํ๋ก์ ํธ ํ์ผ์ด ์์ด ์ฒจ๋ถํฉ๋๋ค. * build: caffenine ์ ์ฉ --------- * fix: fallback ์ํฉ์์ ๋ฆฌ๋ค์ด๋ ํธ uri ์ฐพ๋ ๋ก์ง ์ถ๊ฐ (#113) * release (#114) (#115) * git initialize * feature/swagger-03-gunwoong (#5) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feat: swagger ์ถ๊ฐ * feature/base domain 04 gunwoong (#6) * feat: ๊ณตํต ๋๋ฉ์ธ ๊ตฌํ * feat: ๋ฉ์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐ * feature/OpenAPI Test/02-HwuanPage * feature/OpenAPI Test/02-HwuanPage * Update SurfingForecastApiClient.java * feature/APICallTest-02-HwuanPage * feature/EntityInit-13-HwuanPage * feature/EntityInit-13-HwuanPage * feature/JellyfishEntityInit-13-HwuanPage * Update FishingType.java * feature/EntityInitialize-13-HwuanPage * feat: entity, repositor ๊ตฌํ * feat: ์์ dto ๊ตฌํ * chore: ์์กด์ฑ ์ถ๊ฐ * feat: ๋ก๊ทธ์ธ ๊ตฌํ & ์ดํ ํ ํฐ ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * fix: AuthCotnroller ์์ * fix: ํด๋ผ์ด์ธํธ์์ ์นด์นด์ค์์ ์ฝ๋๋ฅผ ๋ฐ์ ์๋ฒ๋ก post ํ๊ฒ ์์ * feat: ํ ํฐ ๊ฒ์ฆ * feat: refresh token ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ ๋ก์ง ๊ตฌํ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ์ฒ๋ฆฌ & ์ฌ๋ฐ๊ธ ๋ก์ง ๊ตฌํ * feat: SecurityFilterChain ์๋ ํฌ์ธํธ ํ์ฉ * feat: refresh ํ ํฐ ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ ๋ก์ง ๊ตฌํ * feat: redis์์ refreshToken ๋ธ๋๋ฆฌ์คํธ ๊ฒ์ฆ * refactor: controller์ ๊ฐํ๊ฒ ๊ฒฐํฉ ๋์ด ์๋ ๋ก์ง๋ค ๋ถ๋ฆฌ * test: member ๊ด๋ จ ํ ์คํธ * chore: ํ๋์ฝ๋ฉํ ์ค์ ๊ฐ Intellij IDEA ํ๊ฒฝ๋ณ์๋ก ์ค์ * refactor: state ๊ด๋ฆฌ๋ฅผ ์ํด ์ธ์ ์ถ๊ฐ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * feat: member ์ ๋ณด ์กฐํํ๋ ์๋น์ค ๋ก์ง ๊ตฌํ * format: naver formatter๋ก ํฌ๋งคํ * chore: application-dev * fix: customException ์ฒ๋ฆฌ * Feat/meeting interface (#19) * feat : MeetingService ์ธํฐํ์ด์ค ๊ตฌํ * feat : ParticipantResponse * feat : MeetingListResponse ๊ตฌํ * feat : MeetingDetailResponse๊ตฌํ * feat : MeetingDetailAndMemberResponse ๊ตฌํ * feat : ListSpot ๊ตฌํ * feat : DetailSpot ๊ตฌํ * feat : CreateMeetingRequest ๊ตฌํ * feat : Tag ๊ตฌํ * feat : Long -> long ๋ณ๊ฒฝ ์๋น์ค์ Entity๋ด์์ null๊ฐ์ด ์ ๋ ๋์ค์ง ์๋๋ค๊ณ ํ๋จํ๋ ๊ฐ์ long์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. * feat : MeetingService.java -> ๋ฌดํํ์ด์ง๋ก๋ฉํ์์ผ๋ก ๋ฐ๊พธ์์ต๋๋ค. * Update src/main/java/sevenstar/marineleisure/meeting/Dto/Response/MeetingDetailResponse.java --------- * Feature/FavoritesAndAlertInterface-16-HwuanPage * feature/FavoritesAndAlertInterface-16-HwuanPage * Update AlertMapper.java * Update JellyfishRegionDensityRepository.java * Update AlertController.java * Update FavoriteController.java * Update FavoriteRepository.java * Update AlertController.java * Update JellyfishSpieces.java * Update JellyfishRegion.java * Update JellyfishRegion.java * feature/CustomExceptionInit-22-HwuanPage * feature/CustomExceptionInit-22-HwuanPage * Errorcode interface Change * Refactor application.yml ํ๊ฒฝ๋ณ์ ์ค์ (#25) * refactor: application.yml ํ๊ฒฝ๋ณ์ ์ค์ * Rename: ์คํ ์์ * Feature/spot service interface 29 gunwoong (#30) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * Feature/api scheduler 15 gunwoong (#28) * feat: api * feat: api ์ค์ผ์ค๋ง * feat: spot service inteface * test: remove legacy test * feat: apply open meteo * test: apply api test * feat: spot service (#34) * feat: spot service * feat: spot service ๊ณ ๋ํ ๋ฐ ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * feat: ์กฐํ๋ ๊ด๋ จ ์๋น์ค ์ถ๊ฐ * hotfix: duplicated controller method * feature/FavoriteCRUD-33-HwuanPage * DELETE COMPLETE * UPDATE COMPLETE * search COMPLETE * Before gunwoong * FavoriteCRUD create * feat/domain test * FavoriteSpotServiceTest * FavoriteSpotServiceTest * feature/FavoriteCURD-33-HwuanPage * add some description on service * Update FavoriteServiceImpl.java * Feature/spot preview 40 gunwoong (#41) * feat: spot preview & ๋ฆฌํฉํ ๋ง * feat: spot preview & ๋ฆฌํฉํ ๋ง * hotfix: jpa metamodel fix * fix: error fix * fix: ์์ ๋ก๊ทธ์ธ ์ฌ์๋ ์ ๋๋ค์ UNIQUE ์ ์ฝ ์๋ฐ ์ค๋ฅ ๋ฐ์ (#42) * fix: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ํ๋ ๋ฒ๊ทธ ์์ * refactor: ๋ก๊ทธ์์ ํ ์ฌ๋ก๊ทธ์ธ ์ ๋์ผ ์ ๋ณด๋ก db์ insert ์์ ์ฌํญ ๋ฆฌํฉํ ๋ง * test: ๋ณ๊ฒฝ์ฌํญ์ ๋ฐ๋ฅธ ํ ์คํธ ์ฝ๋ ์์ * hofix: bug fix * Feature/Alert-22-HwuanPage * Create Pdf Parser * Web crawler run perpectly,but pdfparser do not work well * PDF parse to stack DB complete with OPENAI * CallAlert Complete * JellyFish PDF parsing work well * feature/ControllerTest Complete * feature/JellyfishAlert-26-HwuanPage * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง (#49) * feat: ์ฆ๊ฒจ์ฐพ๊ธฐ ์ถ๊ฐ ๋ฐ ๋ฆฌํฉํ ๋ง * refactor: ๋ฆฌํฉํ ๋ง * feat: ์นด์นด์ค ๋ก๊ทธ์ธ์ stateless ํ๊ฒ ๋ณ๊ฒฝํ๋ค (#51) * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ * refactor: ๊ธฐ์กด state ์ฌ์ฉ ๋ฐฉ์ -> stateless ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ์ผ๋ก ์ธํด ํ์ ์๋ ์๋ ํฌ์ธํธ ์ญ์ * test: ๋ณ๊ฒฝ์ฌํญ test ์์ * feat: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ์ฝ๋ ๊ตฌํ * test: ์นด์นด์ค ์ธก์์ ์ธ์ฆ ์คํจ์์ ๋ฐํ ํ๋ ์๋ฌ ์ฒ๋ฆฌํ๋ ํ ์คํธ ์ถ๊ฐ * fix: ์ฃผ์ ์ ๊ฑฐ * fix: exception ๋ณ๊ฒฝ * Feat/meeting service (#46) * WIP: Rebase๋ฅผ ์ํ ์์ ์ ์ฅ * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * feat : Meeting.java -> Meeting ์ํฐํฐ @builder ๋ฅผ ์์ ์ด๋ ธํ ์ด์ ์ ์ผ๋จ ์ถ๊ฐ์์ผฐ์ต๋๋ค. * Delete MeetingServiceImplReview.md * Delete MeetingServiceUserFlow.md * feat : ํจํค์ง๋ช ๋ณ๊ฒฝ ์ด์ -> ํจํค์ง ๋ช ์ ์ปจ๋ฒค์ ์ ๋ฐ๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค. * feat : MeetingController.java long participantCount = participantRepository.countMeetingIdMember -> long participantCount = participantRepository.countMeetingId๋ก ์์ ํ์์ต๋๋ค. * feat : MeetingError.java MeetingError.java ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค. * feat : MeetingMapper MeetingServiceImpl์์ ์ฌ์ฉ์ค์ด์๋ Mapper๋ฅผ ๋ถ๋ฆฌํ์์ต๋๋ค. * feat : MeetingService.java ํจํค์ง ๋ช ์์ ์ผ๋ก ์ธํด์ ์์ ์ฌํญ์ด ์์์ต๋๋ค. * feat : MeetingServiceImpl.java ํธ๋์ญ์ ๊ด๋ฆฌ ๋ช ํํ ํ์์ต๋๋ค. validate ํจํค์ง๋ฅผ ๊ฐ์ ํ์์ต๋๋ค. joinMeeting ์ค๋ณต ์ฐธ์ฌ ์ ํ ๋ก์ง์ ๊ฐํํ์์ต๋๋ค. * `getAllMeetings(Long cursorId, int size)`: * ๋ชฉ์ : ๋ชจ๋ ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. cursorId๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌดํ ์คํฌ๋กค๊ณผ ๊ฐ์ ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง์ ์ง์ํฉ๋๋ค. * ํน์ง: @transactional(readOnly = true)๋ฅผ ํตํด ์ฝ๊ธฐ ์ ์ฉ ํธ๋์ญ์ ์ผ๋ก ์ต์ ํ๋์์ต๋๋ค. * `getMeetingDetails(Long meetingId)`: * ๋ชฉ์ : ํน์ ๋ชจ์์ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. ํธ์คํธ, ์ฅ์, ํ๊ทธ ๋ฑ ์ฐ๊ด๋ ์ ๋ณด๋ฅผ ํจ๊ป ๊ฐ์ ธ์ต๋๋ค. * ๊ฐ์ ์์ : ํ์ฌ N+1 ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด, ํฅํ Fetch Join์ ํตํ ์ฑ๋ฅ ์ต์ ํ๊ฐ ํ์ํฉ๋๋ค. * `getStatusMyMeetings(Long memberId, Long cursorId, int size, MeetingStatus meetingStatus)`: * ๋ชฉ์ : ํน์ ํ์์ ์ํ๋ณ(์: ๋ชจ์ง ์ค, ์๋ฃ) ๋ชจ์ ๋ชฉ๋ก์ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ์กฐํํฉ๋๋ค. * `getMeetingDetailAndMember(Long memberId, Long meetingId)`: * ๋ชฉ์ : ํธ์คํธ๊ฐ ์์ ์ ๋ชจ์ ์์ธ ์ ๋ณด์ ์ฐธ์ฌ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค. ์ฐธ์ฌ์๋ค์ ๋๋ค์์ ํจ๊ป ์ ๊ณตํฉ๋๋ค. * `countMeetings(Long memberId)`: * ๋ชฉ์ : ํน์ ํ์์ด ์ฐธ์ฌํ ๋ชจ์์ ์ด ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. * `joinMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ํน์ ๋ชจ์์ ์ฐธ์ฌํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ๋ชจ์ ์ํ ๊ฒ์ฆ(verifyRecruiting), ์ค๋ณต ์ฐธ์ฌ ๊ฒ์ฆ(`verifyNotAlreadyParticipant`), ๋ชจ์ ์ ์ ์ด๊ณผ ๊ฒ์ฆ(verifyMeetingCount) ๋ก์ง์ด ๊ฐํ๋์์ต๋๋ค. * ๊ฐ์ ์์ : ๋์์ฑ ๋ฌธ์ (Race Condition) ํด๊ฒฐ์ ์ํ ๋น๊ด์ ๋ฝ(Pessimistic Lock) ์ ์ฉ์ด ํ์ํฉ๋๋ค. * `leaveMeeting(Long meetingId, Long memberId)`: * ๋ชฉ์ : ํ์์ด ๋ชจ์์์ ํํดํฉ๋๋ค. * ์ฃผ์ ๊ฐ์ : ํธ์คํธ ํํด ๋ฐฉ์ง(verifyNotHost), ๋ชจ์ ์ํ์ ๋ฐ๋ฅธ ํํด ๊ฐ๋ฅ ์ฌ๋ถ ๊ฒ์ฆ(verifyLeave) ๋ก์ง์ด ์ถ๊ฐ๋์์ต๋๋ค. * ๊ฐ์ ์์ : MEETING_NOT_FOUND ๋์ CANNOT_LEAVE_COMPLETED_MEETING๊ณผ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฌ โฆ Co-authored-by: HwuanPage <[email protected]> Co-authored-by: JaeoneHeo <[email protected]> Co-authored-by: LEESUNBIN <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: MyungJin <[email protected]> Co-authored-by: iseonbin <[email protected]> Co-authored-by: MyungJin <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
์์ ๋ด์ฉ
์คํฌ๋ฆฐ์ท
์ฃผ์์ฌํญ
Closes #{์ด์ ๋ฒํธ}